package pl.wsb;

import android.database.sqlite.SQLiteDatabase;
import java.sql.SQLException;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.dao.RuntimeExceptionDao;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;

public class DatabaseHelper extends OrmLiteSqliteOpenHelper {

	private static final String DATABASE_NAME = "wsb.db";
	private static final int DATABASE_VERSION = 1;
	
	private Dao<Osoba,Integer> osobaDao = null;
	private RuntimeExceptionDao<Osoba,Integer> osobaRuntimeDao = null;
	private Dao<Wojewodztwo,Integer> wojewodztwoDao = null;
	private RuntimeExceptionDao<Wojewodztwo,Integer> wojewodztwoRuntimeDao = null;
	private SharedPreferences prefDB;

	
	public DatabaseHelper(Context context) {
//		super(context, , null, DATABASE_VERSION);
		super(context, PreferenceManager.getDefaultSharedPreferences(context).getString("dbname1", DATABASE_NAME), null, DATABASE_VERSION);
//        prefDB = PreferenceManager.getDefaultSharedPreferences(context);
//        Log.d("Wojewodztwa:","Pref:" + prefDB.getString("dbname1", "wsbtest"));
        Log.d("Wojewodztwa:","Pref:" + PreferenceManager.getDefaultSharedPreferences(context).getString("dbname1", "wsbtest"));
        
	}
	
	@Override
	public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {
 
		try {
			Log.i(DatabaseHelper.class.getName(),"onCreate");
			TableUtils.createTable(connectionSource, Osoba.class);
			TableUtils.createTable(connectionSource, Wojewodztwo.class);
		} catch (SQLException e) {
			Log.e(DatabaseHelper.class.getName(), "Can't create database",e);
			throw new RuntimeException(e);
		}
		
		//RuntimeExceptionDao<Osoba,Integer> dao = getOsobaDataDao();
		//long millis = System.currentTimeMillis();
		//Osoba osoba = new Osoba();
		//dao.create(osoba);
		
		//RuntimeExceptionDao<Wojewodztwo,Integer> daowoj = getWojewodztwoDataDao();
		//Wojewodztwo wojewodztwo = new Wojewodztwo();
		//daowoj.create(wojewodztwo);
		
		//Log.i(DatabaseHelper.class.getName(), "created new entries in onCreate: " + millis);

	}

	@Override
	public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion,
			int newVersion) {
		try {
			Log.i(DatabaseHelper.class.getName(), "onUpgrade");
			TableUtils.dropTable(connectionSource, Osoba.class, true);
			TableUtils.dropTable(connectionSource, Wojewodztwo.class, true);
			onCreate(db,connectionSource);
		} catch (SQLException e) {
			Log.e(DatabaseHelper.class.getName(), "Can't drop databases", e);
			throw new RuntimeException(e);
		}

	}
	
	public RuntimeExceptionDao<Osoba,Integer> getOsobaDataDao() {
		if(osobaRuntimeDao == null) {
			osobaRuntimeDao = getRuntimeExceptionDao(Osoba.class);
		}
		return osobaRuntimeDao;
	}

	public RuntimeExceptionDao<Wojewodztwo,Integer> getWojewodztwoDataDao() {
		if(wojewodztwoRuntimeDao == null) {
			wojewodztwoRuntimeDao = getRuntimeExceptionDao(Wojewodztwo.class);
		}
		return wojewodztwoRuntimeDao;
	}
	public Dao<Osoba,Integer> getOsobaDao() throws SQLException {
		if (osobaDao == null) {
			osobaDao = getDao(Osoba.class);
		}
		return osobaDao;
	}
	public Dao<Wojewodztwo,Integer> getWojewodztwoDao() throws SQLException {
		if (wojewodztwoDao == null) {
			wojewodztwoDao = getDao(Wojewodztwo.class);
		}
		return wojewodztwoDao;
	}	
	@Override
	public void close() {
		super.close();
		osobaRuntimeDao = null;
		wojewodztwoDao = null;
	}

}
